# -*- coding: utf-8 -*-
"""
@Version : 
@Author  : ChenMZ
@Time    : 2025/09/22
@File    : gpu_entity.py
@Desc    : GPU实体
@Modify  : 
"""
import GPUtil
from device.dev_entity.abc_entity import DevEntity


class GpuEntity(DevEntity):
    def __init__(self, current_gpu, gputil: GPUtil.GPU):
        self.gpu_base = current_gpu
        self._gputil = gputil

    def to_dict(self):
        return self.__dict__
        
    @property
    def accelerator_capabilities(self):
        """
        一个数组，描述了图形加速能力。例如，支持矩形填充、曲线绘制等。现在大多数显卡都支持全部功能
        
        :return:
        """
        return self.gpu_base.AcceleratorCapabilities
    
    @property
    def adapter_compatibility(self):
        """
        制造此显卡的公司名称。通常是芯片制造商，如 NVIDIA，而不是品牌商。
        :return:
        """
        return self.gpu_base.AdapterCompatibility
    
    @property
    def adapter_dac_type(self):
        """
        数模转换器（DAC）芯片的名称。例如，Integrated RAMDAC。
        :return:
        """
        return self.gpu_base.AdapterDACType
    
    @property
    def adapter_ram(self):
        """
        显存容量（以字节为单位）。这是一个非常重要的属性。注意：在某些系统上，对于集成显卡，此值可能报告为系统共享内存的大小，或者是一个固定的理论最大值，可能与实际分配值不符。
        :return:
        """
        return self.gpu_base.AdapterRAM
    
    @property
    def availability(self):
        """
        设备的可用状态
        :return:
        """
        return self.gpu_base.Availability
    
    @property
    def caption(self):
        """
        视频控制器的简短描述。例如，NVIDIA GeForce RTX 3080。
        :return:
        """
        return self.gpu_base.Caption
    
    @property
    def current_bits_per_pixel(self):
        """
        当前显示模式的每个像素的位数（颜色深度）。例如，32 位色深此值为 32
        :return:
        """
        return self.gpu_base.CurrentBitsPerPixel
    
    @property
    def current_horizontal_resolution(self):
        """
        当前显示模式的水平分辨率（像素数）。
        :return:
        """
        return self.gpu_base.CurrentHorizontalResolution
    
    @property
    def current_vertical_resolution(self):
        """
        当前显示模式的垂直分辨率（像素数）。
        :return:
        """
        return self.gpu_base.CurrentVerticalResolution
    
    @property
    def current_refresh_rate(self):
        """
        当前显示模式的刷新率（以 Hz 为单位）。例如，60, 144。
        :return:
        """
        return self.gpu_base.CurrentRefreshRate
    
    @property
    def current_number_of_colors(self):
        """
        当前分辨率下支持的颜色数量。对于 32 位色，这是一个非常大的数字（2^32），通常用 -1（表示 True Color）或一个极大值来表示。
        :return:
        """
        return self.gpu_base.CurrentNumberOfColors
    
    @property
    def current_scan_mode(self):
        """
        当前显示扫描模式。
        4： 增强彩色图形适配器 (VGA) 或更高版本。
        5： 紫外线光写器 (UVM) 彩色图形适配器 或更高版本。
        
        :return:
        """
        return self.gpu_base.CurrentScanMode
    
    @property
    def description(self):
        """
        视频控制器的详细描述。通常与 gpu_name 相同。
        :return:
        """
        return self.gpu_base.Description
    
    @property
    def device_id(self):
        """
        视频控制器的唯一标识符。例如，VideoController1。

        :return:
        """
        return self.gpu_base.DeviceID
    
    @property
    def driver_date(self):
        """
        显卡驱动程序的发布日期。格式为 yyyymmddhhmmss.mmmmmm+xxx。
        :return:
        """
        return self.gpu_base.DriverDate
    
    @property
    def driver_version(self):
        """
        显卡驱动程序的版本号字符串。例如，30.0.15.1123。

        :return:
        """
        return self.gpu_base.DriverVersion
    
    @property
    def max_memory_supported(self):
        """
        此控制器支持的最大内存。此值可能不可靠。
        :return:
        """
        return self.gpu_base.MaxMemorySupported
    
    @property
    def max_refresh_rate(self):
        """
        当前分辨率下，控制器支持的最大刷新率。
        :return:
        """
        return self.gpu_base.MaxRefreshRate
    
    @property
    def min_refresh_rate(self):
        """
        在当前分辨率下，控制器支持的最小刷新率。
        :return:
        """
        return self.gpu_base.MinRefreshRate

    @property
    def gpu_name(self):
        """
        视频控制器的全名。例如，NVIDIA GeForce RTX 3080。
        :return:
        """
        return self.gpu_base.Name

    @property
    def video_architecture(self):
        """
        视频架构的类型。
        :return:
        """
        return self.gpu_base.VideoArchitecture

    @property
    def video_memory_type(self):
        """
        显存类型。
        :return:
        """
        return self.gpu_base.VideoMemoryType

    @property
    def video_processor(self):
        """
        视频控制器的处理器/芯片组名称。例如，NVIDIA GeForce RTX 3080。
        :return:
        """
        return self.gpu_base.VideoProcessor
    
    @property
    def load_percentage(self):
        """
        负载

        :return:
        """
        return self._gputil.load

    @property
    def memory_used(self):
        """
        显存占用 单位MB
        :return:
        """
        return self._gputil.memoryUsed


